package com.smdp.service;

import com.smdp.dto.Result;
import com.smdp.entity.Shop;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 店铺管理服务接口。
 * 包含新增、查询（根据商铺id、根据商铺类型、根据商铺类型+商铺距离、根据商铺名称）、更新商铺信息的功能。
 *
 * @author 蔡方珩
 */
public interface IShopService extends IService<Shop> {
    /**
     * 根据id查询商铺信息。
     * 使用布隆过滤器和逻辑过期防止缓存击穿。
     * @param id 商铺id
     * @return 成功：商铺详情数据 / 失败：失败原因
     */
    Result queryById(Long id);
    /**
     * 更新商铺信息
     * @param shop 商铺数据
     * @return 成功：ok / 失败：失败原因
     */
    Result updateShop(Shop shop);
    /**
     * 根据商铺类型分页查询商铺信息，根据商铺距离进行排序
     * @param typeId 商铺类型
     * @param current 当前页码
     * @param x x坐标
     * @param y y坐标
     * @param d 查询距离
     * @return 成功：按距离查询的商铺列表 / 无位置信息：按类型分页查询商户 / 失败：空列表
     */
    Result queryShopByType(Integer typeId, Integer current, Double x, Double y, Double d);
    /**
     * 新增商铺信息。
     * 同时将商铺信息保存到布隆过滤器和缓存中。
     * @param shop 商铺数据
     * @return 成功：商铺id / 失败：失败原因
     */
    Result saveShop(Shop shop);
    /**
     * 根据商铺名称关键字分页查询商铺信息
     * @param name 商铺名称关键字
     * @param current 页码
     * @return 分页的商铺列表
     */
    Result queryShopByName(String name, Integer current);
}
